Fix Enclave Interfaces of WAMR SGX version; Set pointer to NULL after free, otherwise cause UAF/DF#2357
Fix Enclave Interfaces of WAMR SGX version; Set pointer to NULL after free, otherwise cause UAF/DF#2357LeoneChen wants to merge 4 commits intobytecodealliance:mainfrom
Conversation
LeoneChen
commented
Jul 13, 2023
- Fix Enclave Interfaces of WAMR SGX version
- Set pointer to NULL after free, otherwise cause UAF/DF
|
Hi, I see that there some CI tests are failing, seems not able to call BTW, what is the purpose of using idx rather than raw pointer for module_inst and other data? Is it for easier management with the help of the newly introduced pointer manager? |
Use raw pointer is very dangerous, since it can point to in-Enclave memory, it's hard to check pointed memory is a valid context content or invalid sensitive in-Enclave data. So use indexes to replace the raw pointers when passing
|
|
Thanks! That makes sense |
Do you means CI tests successfully call |
This part of code maybe can be optimized. I think it's better to avoid using lock |
Can you provide more detail about it? Then I can figure out why it failed |
Some spec tests are failing, output is something like: Starting interpreter for module '/tmp/tmp9j2olynn.aot'
Running: ../../../product-mini/platforms/linux-sgx/enclave-sample/iwasm --heap-size=0 -v=0 --repl /tmp/tmp9j2olynn.aot
Testing(return) i32_add = 0x102:i32
THE FINAL EXCEPTION IS out should be in a form likes numbers:type, but Call ecall_handle_cmd_exec_app_func() failed.You can run a hello world aot file with similar cmd option to reproduce it to double-check whether it's due to the newly added check |
On your local machine, you can also run spec tests to check: # assume you install the SDK in /opt/intel/sgxsdk/
source /opt/intel/sgxsdk/environment
# in WAMR root directory
cd tests/wamr-test-suites
# the shell script will automatically compile needed component and run spec test on sgx iwasm
./test_wamr.sh -b -x -t aot -s spec -p -P |
Ok, I'll try aot mode. I currently is preparing thesis proposal, so maybe late to fix it. |
Thanks |
|
No hurry, good luck with your thesis! |
Thanks! |
|
@TianlongLiang Hello, I fixed the parameters check in 1306d68, and all CI tests passed |
|
LGTM |
product-mini/platforms/linux-sgx/enclave-sample/Enclave/Enclave.cpp
Outdated
Show resolved
Hide resolved
|
|
||
| wasm_application_execute_main(module_inst, app_argc - 1, app_argv + 1); | ||
|
|
||
| for (uint32 i = 0; i < app_argc; i++) { |
There was a problem hiding this comment.
The return value may be written back into app_argv[0..1], had better copy them back into u_app_argv
There was a problem hiding this comment.
The return value may be written back into app_argv[0..1], had better copy them back into u_app_argv
Hello I want to confirm, it means 1. put the return value (bool type) into app_argv[0..1] or 2. content in app_argv can be modified by wasm_application_execute_main, and you want this modification propagates to outside of Enclave
There was a problem hiding this comment.
Hi, I checked again, wasm_application_execute_main puts the return value into *(int *)argv, here should be *(int *)(app_argv + 1), see:
https://github.com/bytecodealliance/wasm-micro-runtime/blob/main/core/iwasm/include/wasm_export.h#L836-L838
So my understanding is that we had better write*(int *)(app_argv + 1) back into *(int *)u_app_argv?
There was a problem hiding this comment.
I got it, so it's case 2, and I have to let the content in *(int*)argv propagates to outside Enclave
|
CI tests failed again. What is nuttx. How can I reproduce this problem in my local machine |
Nuttx CI issue was fixed with PR #2414, could you rebase again? |
OK, I try it |
2. Set pointer to NULL after free, otherwise cause UAF/DF
|
@LeoneChen Many thanks for the fixing, it really improves the security of WAMR linux-sgx. We are preparing to release 1.2.3, since the changes of this PR are a little big and complex, we (and some customers) need to more time to test, I think we had better merge this PR after the new release is created, and currently we can create another PR to fix the issue of |
Yes, it's OK. Fix This PR is complex and needs more review, and I also need to think about how to write back content to |
|
Fix it by yourself or I create a new PR? |
Let me fix it by myself😊 |
|
OK |
I think it's not a good code practice... And in current situation, Maybe can use stack memory |
Yes, how about adding an extra argument in public bool ecall_handle_cmd_exec_app_main(
uint16_t wasm_module_inst_idx,
[in, count=app_argc] char **u_app_argv,
uint32_t app_argc,
[out, count=1] int *ret_main
); |
@LeoneChen I found more similar issues in Enclave, and uploaded PR #2416 to fix them, could you help review it? Thanks. |
OK |
|
@LeoneChen We've created a new PR to enhance the enclave. Please take a look and share your comments. |